Skip to content

《C语言程序设计》期末试卷 (精选11)

一、单项选择题

要求: 根据题目从 A、B、C、D 中选择一个正确的选项

  1. 根据下面的定义,能打印出字母 M 的语句是( )。
c
struct person
{
    char name[9];
    int age;
};
struct person class[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};
  • A. printf("%c\n",class[3].name);
  • B. printf("%c\n",class[3].name[1]);
  • C. printf("%c\n",class[2].name[1]);
  • D. printf("%c\n",class[2].name[0]);
查看答案与解析

答案:D

解析:class[2] 是 "Mary"(索引从 0 开始:class[0]="John", class[1]="Paul", class[2]="Mary"),name[0] 是 'M'。


难度: ⭐ 考点: #结构体数组 #索引

💡 学习锦囊

📖 相关公式与知识点:

  • 结构体数组索引从 0 开始。
  • %c 输出单个字符,%s 输出字符串。

易错点

A 选项用 %c 输出 class[3].name(地址),类型不匹配。

🔄 举一反三
  1. 打印出字母 'P' 的语句是什么?
    查看练习答案与解析

    答案printf("%c\n",class[1].name[0]);解析:class[1] 是 "Paul",name[0] 是 'P'。

  1. 关于字符型变量的定义,下列选项正确的是( )。
    • A. char ch = a;
    • B. char ch = 'a';
    • C. char ch = "a";
    • D. char ch = \a;
查看答案与解析

答案:B

解析: 字符常量用单引号括起来。A 中 a 是未定义标识符,C 中 "a" 是字符串(双引号),D 缺少引号。


难度: ⭐ 考点: #字符常量 #char

💡 学习锦囊

📖 相关公式与知识点:

  • 字符常量:单引号 'a',占 1 字节。
  • 字符串常量:双引号 "a",占 2 字节(含 '\0')。

易错点

单引号和双引号不可混用,'a'"a" 是不同的数据类型。

🔄 举一反三
  1. char ch = 97; 是否合法?ch 的值是什么?
    查看练习答案与解析

    答案:合法,ch 的值为 'a' 解析:97 是 'a' 的 ASCII 码,可以直接赋值给 char 变量。

  1. 关于二进制,下列描述错误的是( )。
    • A. 二进制数由数字 0 和 1 表示
    • B. 一个二进制数字 0 和 1 表示一位,八位为一个字节
    • C. 由于二进制由数值较小的 0 和 1 表示,所以只能表示一部分数据
    • D. 二进制与十进制相互转换,不改变值的大小
查看答案与解析

答案:C

解析: 二进制可以表示所有数据,通过组合 0 和 1 可以表示任意数值、字符、图像等。计算机中所有数据最终都以二进制形式存储。


难度: ⭐ 考点: #二进制 #数制

💡 学习锦囊

📖 相关公式与知识点:

  • 二进制是计算机的基础,所有数据(数字、文字、图像、声音)都以二进制存储。
  • 1 字节 = 8 位(bit)。

思路分析

二进制虽然只有 0 和 1 两个符号,但通过位数扩展可以表示任意大的数值。

🔄 举一反三
  1. 8 位二进制能表示多少个不同的值?
    查看练习答案与解析

    答案:256(0~255) 解析:2^8 = 256。

  1. C 语言程序从 main()函数开始执行,所以这个函数要写在( )。
    • A. 程序文件的开始
    • B. 程序文件的最后
    • C. 它所调用的函数的前面
    • D. 程序文件的任何位置
查看答案与解析

答案:D

解析: main 函数可以放在程序文件的任何位置,编译器通过函数名定位入口点。


难度: ⭐ 考点: #main函数 #程序结构

💡 学习锦囊

📖 相关公式与知识点:

  • main 是程序的逻辑入口,物理位置任意。
  • 建议将 main 放在文件末尾或开头以便阅读。
🔄 举一反三
  1. 如果程序中没有 main 函数,会发生什么?
    查看练习答案与解析

    答案:链接错误,提示找不到 main 函数 解析:C 程序必须有且仅有一个 main 函数作为入口。

  1. 关于 strcmp( )函数,下列描述中错误的是( )
    • A. strcmp( )函数用于比较两个字符串的内容是否相等
    • B. 如果两个字符串的内容相同,strcmp( )函数返回 0
    • C. strcmp( )函数是可变参数的函数
    • D. strcmp( )函数只能接收字符指针作为参数,并不接收单个字符
查看答案与解析

答案:C

解析: strcmp 函数有两个固定的参数(两个字符串),不是可变参数函数。可变参数函数如 printf、scanf。


难度: ⭐ 考点: #strcmp #字符串比较

💡 学习锦囊

📖 相关公式与知识点:

  • strcmp(s1, s2):返回 0 表示相等,负数表示 s1<s2,正数表示 s1>s2。
  • 需要 #include <string.h>
🔄 举一反三
  1. strcmp("abc", "ABC") 的返回值是什么?
    查看练习答案与解析

    答案:正数(大于 0) 解析:'a'(97) > 'A'(65),所以 "abc" > "ABC"。

  1. C 语言程序从( )开始执行。
    • A. 程序中第一条可执行语句
    • B. 程序中第一个函数
    • C. 程序中的 main 函数
    • D. 包含文件中的第一个函数
查看答案与解析

答案:C

解析: C 程序总是从 main 函数开始执行,无论 main 函数在文件中的位置如何。


难度: ⭐ 考点: #程序入口 #main

💡 学习锦囊

📖 相关公式与知识点:

  • main 函数是 C 程序的唯一入口点。
  • 程序从 main 的第一条语句开始执行,到 main 的 return 或最后一条语句结束。
🔄 举一反三
  1. 在 main 函数之前定义的全局变量何时初始化?
    查看练习答案与解析

    答案:在 main 函数执行之前 解析:全局变量在程序加载时初始化,早于 main 的执行。

  1. 定义一个字符型变量,下列选项中正确的是( )。
    • A. char c = '97'
    • B. char c = "97"
    • C. char c = 97
    • D. char c = c
查看答案与解析

答案:C

解析:char c = 97 将 ASCII 码 97(字符 'a')赋值给 c。A 中单引号内只能有一个字符,B 是字符串,D 中 c 未定义。


难度: ⭐ 考点: #char赋值 #ASCII

💡 学习锦囊

📖 相关公式与知识点:

  • char 本质是 1 字节整数,可以赋整数值(0~255)。
  • char c = 'a'char c = 97 等价。

易错点

单引号内只能有一个字符,'97' 是多字符常量,行为未定义。

🔄 举一反三
  1. char c = '0';char c = 0; 有什么区别?
    查看练习答案与解析

    答案:前者 c 的值为 48(字符 '0' 的 ASCII 码),后者 c 的值为 0(空字符 '\0') 解析:字符 '0' 的 ASCII 码是 48,不是 0。

  1. int i=10; 执行下列程序后,变量 i 的正确结果是( )。
c
switch ( i )
{
    case 9: i+=1;
    case 10: i+=1;
    case 11: i+=1;
    default : i+=1;
}
  • A. 13
  • B. 12
  • C. 11
  • D. 10
查看答案与解析

答案:A

解析: i=10 进入 case 10。由于没有 break,依次穿透执行 case 10、case 11 和 default。i = 10+1+1+1 = 13。


难度: ⭐⭐ 考点: #switch穿透 #break

💡 学习锦囊

📖 相关公式与知识点:

  • switch 中如果没有 break,会从匹配的 case 开始一直执行到 switch 结束。
  • 这种"穿透"特性有时被故意利用,但通常需要 break 来分隔。

易错点

忘记写 break 是 switch 语句中最常见的错误。

🔄 举一反三
  1. 若在每个 case 后加 break;,i 的值是多少?
    查看练习答案与解析

    答案:11 解析:只执行 case 10 中的 i+=1,然后 break 跳出。

  1. 若有以下说明语句:
c
struct student
{
    int num;
    char name[20];
    float score;
} stu;

则下面的叙述不正确的是 ( )。

  • A. struct 是结构体类型的关键字
  • B. struct student 是用户定义的结构体类型
  • C. num, score 都是结构体成员名
  • D. stu 是用户定义的结构体类型名
查看答案与解析

答案:D

解析: stu 是结构体变量名,不是类型名。类型名是 struct student


难度: ⭐ 考点: #结构体 #类型与变量

💡 学习锦囊

📖 相关公式与知识点:

  • struct student 是类型名,stu 是变量名。
  • 区分类型定义和变量定义。
  • 结构体中字符数组必须指定大小,如 char name[20]

易错点

  • 混淆类型名和变量名。
  • 结构体中不能使用不完整类型 char name[],必须指定数组大小。
🔄 举一反三
  1. 如何用 struct student 定义另一个变量 s2?
    查看练习答案与解析

    答案struct student s2;解析:使用类型名定义新变量。

  1. 下列选项中,表示字符串末尾的结束标志是 ( )
    • A. '\n'
    • B. '\r'
    • C. '\0'
    • D. NULL
查看答案与解析

答案:C

解析:'\0'(ASCII 值为 0)是 C 语言字符串的结束标志。'\n' 是换行符,'\r' 是回车符,NULL 是指针空值。


难度: ⭐ 考点: #字符串结束符 #\0

💡 学习锦囊

📖 相关公式与知识点:

  • 字符串以 '\0' 结尾,占用额外 1 字节。
  • strlen("abc") = 3,但 sizeof("abc") = 4。

易错点

NULL 是指针常量(值为 0),'\0' 是字符常量(值为 0),数值相同但类型不同。

🔄 举一反三
  1. char s[5]="abc"; 中 s[3] 和 s[4] 的值是什么?
    查看练习答案与解析

    答案:s[3]='\0',s[4]='\0' 解析:字符串 "abc" 占 4 字节,剩余元素自动初始化为 0。

二、判断题(每题 1 分,共 10 分)

要求: 正确打钩 (✓),错误打叉 (✗)

  1. 注释在编译时也会被编译到程序中 ( )
查看答案与解析

答案:

解析: 注释在预处理阶段被移除,不会被编译到目标代码中。


难度: ⭐ 考点: #注释 #预处理

💡 学习锦囊

📖 相关公式与知识点:

  • 单行注释://
  • 多行注释:/* */
  • 注释不影响程序大小和运行效率。
🔄 举一反三
  1. 注释可以嵌套吗?
    查看练习答案与解析

    答案:C 语言中 /* */ 不能嵌套 解析:第一个 */ 会结束注释,后续内容会被编译。

  1. 浮点型常量的指数表示中,e 是可以省略的。 ( )
查看答案与解析

答案:

解析: 科学计数法中 e 不能省略。如 1.23e4 表示 $1.23 \times 10^4$,省略 e 就变成了普通小数 1.234。


难度: ⭐ 考点: #浮点常量 #科学计数法

💡 学习锦囊

📖 相关公式与知识点:

  • 科学计数法格式:尾数e指数尾数E指数
  • 指数必须是整数。

易错点

1.23e4.5 不合法,指数必须是整数。

🔄 举一反三
  1. 1e3 表示什么值?
    查看练习答案与解析

    答案:1000.0 解析:1×10^3 = 1000.0。

  1. 若有定义 char s[] = {"hello"}; 则 sizeof(s)的大小为 5。 ( )
查看答案与解析

答案:

解析:sizeof(s) = 6,因为字符串 "hello" 自动包含结尾的 '\0',共 6 个字符。


难度: ⭐ 考点: #sizeof #字符串

💡 学习锦囊

📖 相关公式与知识点:

  • sizeof 返回变量或类型占用的字节数。
  • 字符串字面量自动添加 '\0'

易错点

strlen(s) = 5(不计 '\0'),sizeof(s) = 6(计 '\0')。

🔄 举一反三
  1. char s[10]="hello"; 的 sizeof(s) 是多少?
    查看练习答案与解析

    答案:10 解析:sizeof 返回数组定义的大小,不是字符串长度。

  1. 在 switch 语句中,每一个的 case 常量表达式的值可以相同。 ( )
查看答案与解析

答案:

解析: switch 中每个 case 的值必须互不相同,否则编译器无法确定跳转目标。


难度: ⭐ 考点: #switch #case

💡 学习锦囊

📖 相关公式与知识点:

  • case 后的值必须是整型常量表达式。
  • 所有 case 值必须唯一。
🔄 举一反三
  1. switch(x) { case 1: ...; case 1: ...; } 能编译通过吗?
    查看练习答案与解析

    答案:不能,编译错误 解析:重复的 case 值会导致编译错误。

  1. 编写 C 语言程序的流程是:新建项目、添加源文件、编写代码、运行程序。 ( )
查看答案与解析

答案:

解析: 这是 C 语言程序开发的基本流程。更完整的流程还包括编译、链接、调试等步骤。


难度: ⭐ 考点: #开发流程

💡 学习锦囊

📖 相关公式与知识点:

  • 完整流程:编辑 → 编译 → 链接 → 运行 → 调试。
  • 编译将 .c 转为 .obj,链接将 .obj 转为 .exe。
🔄 举一反三
  1. 编译和链接有什么区别?
    查看练习答案与解析

    答案:编译将源代码转为目标代码,链接将多个目标文件和库合并为可执行文件。

  1. 线性表在链式存储时,查找第 i 个元素的时间与 i 的值成正比。 ( )
查看答案与解析

答案:

解析: 链表需要从头结点开始逐个遍历到第 i 个元素,时间复杂度为 O(i)。


难度: ⭐⭐ 考点: #链表 #时间复杂度

💡 学习锦囊

📖 相关公式与知识点:

  • 链表随机访问时间复杂度:O(n)。
  • 数组随机访问时间复杂度:O(1)。

思路分析

链表不支持随机访问,必须从头遍历。

🔄 举一反三
  1. 数组查找第 i 个元素的时间复杂度是多少?
    查看练习答案与解析

    答案:O(1) 解析:数组支持随机访问,通过首地址 + i×元素大小直接定位。

  1. 结构体变量可以作数组元素。 ( )
查看答案与解析

答案:

解析: 结构体变量可以作为数组元素,形成结构体数组。如 struct student s[10];


难度: ⭐ 考点: #结构体数组

💡 学习锦囊

📖 相关公式与知识点:

  • 结构体数组:struct 类型名 数组名[大小];
  • 访问:数组名[下标].成员名
🔄 举一反三
  1. 如何初始化一个结构体数组?
    查看练习答案与解析

    答案struct student s[2] = { {1,"Tom"}, {2,"Jerry"} };解析:每个元素用花括号初始化。

  1. 当栈中元素已满时,就不能继续执行入栈操作。同理,栈为空时,也不能继续执行出栈操作。 ( )
查看答案与解析

答案:

解析: 栈满时入栈会导致"上溢"(overflow),栈空时出栈会导致"下溢"(underflow)。


难度: ⭐ 考点: #栈 #数据结构

💡 学习锦囊

📖 相关公式与知识点:

  • 栈是 LIFO(后进先出)结构。
  • 基本操作:push(入栈)、pop(出栈)。
  • 需要检查栈满/栈空条件。
🔄 举一反三
  1. 队列满时能继续入队吗?
    查看练习答案与解析

    答案:不能(普通队列),但循环队列可能覆盖 解析:队列满时入队也会溢出。

  1. 共用体变量可以作结构体的成员,结构体变量也可以作共用体的成员。 ( )
查看答案与解析

答案:

解析: C 语言允许结构体和共用体互相嵌套。共用体作为结构体成员可以节省空间,结构体作为共用体成员可以实现类型变体。


难度: ⭐⭐ 考点: #共用体 #结构体嵌套

💡 学习锦囊

📖 相关公式与知识点:

  • 共用体(union):所有成员共享同一内存空间。
  • 结构体(struct):每个成员有独立的内存空间。
🔄 举一反三
  1. 共用体的大小如何确定?
    查看练习答案与解析

    答案:等于最大成员的大小 解析:共用体所有成员共享空间,大小为最大成员的大小。

  1. 一维数组指的是只有一个下标的数组,用来表示一组具有相同类型的数据。 ( )
查看答案与解析

答案:

解析: 一维数组是线性结构,所有元素类型相同,通过一个下标访问。


难度: ⭐ 考点: #一维数组

💡 学习锦囊

📖 相关公式与知识点:

  • 一维数组定义:类型 数组名[大小];
  • 元素访问:数组名[下标],下标从 0 开始。
🔄 举一反三
  1. 二维数组有几个下标?
    查看练习答案与解析

    答案:两个(行和列) 解析a[i][j] 使用两个下标。

三、填空题(每空 1 分,共 10 分)

  1. 操作字符串的函数有很多,其中 ( ) 函数是求字符串的长度。
查看答案与解析

答案: strlen

解析:strlen(s) 返回字符串 s 的长度(不包括 '\0'),需要 #include <string.h>


难度: ⭐ 考点: #strlen #字符串函数

💡 学习锦囊

📖 相关公式与知识点:

  • strlen 返回 size_t 类型(无符号整数)。
  • sizeof 的区别:strlen 是函数(运行时),sizeof 是运算符(编译时)。
🔄 举一反三
  1. strlen("abc\0def") 的返回值是多少?
    查看练习答案与解析

    答案:3 解析:strlen 遇到第一个 '\0' 就停止计数。

  1. C 语言中数组名代表数组的 ( ) 地址。
查看答案与解析

答案: 首(或起始)

解析: 数组名代表数组的首地址,即第一个元素的地址。arr 等价于 &arr[0]


难度: ⭐ 考点: #数组名 #地址

💡 学习锦囊

📖 相关公式与知识点:

  • 数组名是地址常量,不能修改。
  • arr + i 等价于 &arr[i]
🔄 举一反三
  1. arr&arr 有什么区别?
    查看练习答案与解析

    答案:数值相同但类型不同。arr 是指向首元素的指针,&arr 是指向整个数组的指针。 解析arr+1 跳过 1 个元素,&arr+1 跳过整个数组。

  1. 与十进制数 1770.625 对应的八进制数是 ( )
查看答案与解析

答案: 3352.5

解析:

  • 整数部分:1770 ÷ 8 = 221 余 2,221 ÷ 8 = 27 余 5,27 ÷ 8 = 3 余 3,3 ÷ 8 = 0 余 3 → 3352
  • 小数部分:0.625 × 8 = 5.0 → 0.5

难度: ⭐⭐ 考点: #进制转换 #八进制

💡 学习锦囊

📖 相关公式与知识点:

  • 十进制转八进制:整数部分除 8 取余(倒序),小数部分乘 8 取整(正序)。
  • 八进制数以 0 开头:03352.5
🔄 举一反三
  1. 十进制 100 对应的八进制数是多少?
    查看练习答案与解析

    答案:144 解析:100÷8=12 余 4,12÷8=1 余 4,1÷8=0 余 1 → 144。

  1. 初始化结构体数组有两种方式:先定义结构体数组类型再初始化结构体数组、( )。
查看答案与解析

答案: 定义结构体数组的同时进行初始化

解析: 两种方式:

  1. 先定义类型,再定义数组并初始化
  2. 定义结构体数组的同时直接初始化

难度: ⭐ 考点: #结构体初始化

💡 学习锦囊

📖 相关公式与知识点:

  • 方式一:struct student { ... }; struct student s[2] = {...};
  • 方式二:struct student { ... } s[2] = {...};
🔄 举一反三
  1. 结构体变量有几种初始化方式?
    查看练习答案与解析

    答案:两种(定义时初始化和逐成员赋值) 解析:C99 还支持指定初始化器。

  1. 数组的下标是用 ( ) 括起来的,而不是圆括号。
查看答案与解析

答案: 方括号

解析: 数组下标使用方括号 [],如 a[0]。圆括号 () 用于函数调用。


难度: ⭐ 考点: #数组语法

💡 学习锦囊

📖 相关公式与知识点:

  • []:数组下标运算符。
  • ():函数调用运算符、强制类型转换、分组。
🔄 举一反三
  1. a(0) 在 C 语言中表示什么?
    查看练习答案与解析

    答案:调用函数 a,参数为 0 解析:圆括号表示函数调用。

  1. 在文件中,以符号常量 EOF 作为文本文件(字符流文件)的结束标记,则 EOF 代表的值是 ( )。
查看答案与解析

答案: -1

解析: EOF(End Of File)在 stdio.h 中定义为 -1。因为字符的 ASCII 码范围是 0~255,-1 不会与任何有效字符冲突。


难度: ⭐ 考点: #EOF #文件结束

💡 学习锦囊

📖 相关公式与知识点:

  • EOFstdio.h 中定义的宏,值为 -1。
  • 用于判断文件读取是否结束:while((c=getchar())!=EOF)
🔄 举一反三
  1. 为什么 EOF 的值是 -1 而不是 0?
    查看练习答案与解析

    答案:因为 0 是合法字符 '\0' 的 ASCII 码,-1 不会与任何字符冲突。

  1. 结构体指针引用成员变量的方式是使用 ( ) 运算符。
查看答案与解析

答案: ->

解析: 结构体指针使用 -> 访问成员,如 p->name。等价于 (*p).name


难度: ⭐ 考点: #结构体指针 #->运算符

💡 学习锦囊

📖 相关公式与知识点:

  • p->成员 等价于 (*p).成员
  • . 用于结构体变量,-> 用于结构体指针。
🔄 举一反三
  1. p->name(*p).name 有什么区别?
    查看练习答案与解析

    答案:没有区别,完全等价 解析-> 是语法糖,使代码更简洁。

  1. 数组指针是指一个指向数组的指针,指针数组是指数组中的元素类型都是 ( )。
查看答案与解析

答案: 指针

解析:

  • 数组指针:int (*p)[5],指向含 5 个 int 的数组。
  • 指针数组:int *p[5],数组的 5 个元素都是指针。

难度: ⭐⭐ 考点: #数组指针 #指针数组

💡 学习锦囊

📖 相关公式与知识点:

  • int (*p)[5]:数组指针(先读 *p 是指针,指向 int[5])。
  • int *p[5]:指针数组(先读 p[5] 是数组,元素是 int*)。

易错点

[] 优先级高于 *,所以 *p[5] 是数组,(*p)[5] 是指针。

🔄 举一反三
  1. int (*p[5])() 表示什么?
    查看练习答案与解析

    答案:函数指针数组,5 个元素,每个是指向返回 int 的函数的指针

  1. 由 ( ) 组成的数据类型称为结构体类型。
查看答案与解析

答案: 不同类型的数据

解析: 结构体可以将不同类型的数据组合在一起,形成一个新的复合数据类型。


难度: ⭐ 考点: #结构体定义

💡 学习锦囊

📖 相关公式与知识点:

  • 结构体 vs 数组:数组元素类型相同,结构体成员类型可以不同。
  • 结构体是用户自定义的复合数据类型。
🔄 举一反三
  1. 共用体和结构体的主要区别是什么?
    查看练习答案与解析

    答案:结构体成员各有独立空间,共用体成员共享同一空间。

  1. char 关键字用于声明一个字符类型变量,( ) 关键字用于声明整型变量。
查看答案与解析

答案: int

解析:int 是 C 语言中声明整型变量的关键字。


难度: ⭐ 考点: #数据类型 #关键字

💡 学习锦囊

📖 相关公式与知识点:

  • 基本类型关键字:charintfloatdouble
  • 修饰符:shortlongsignedunsigned
🔄 举一反三
  1. long 是数据类型关键字吗?
    查看练习答案与解析

    答案:是 解析long 是类型修饰符,long int 可简写为 long

四、程序问答题

1. 编写程序

题目: 编写程序,键盘输入一个不多于 4 位数,求出它是几位数。

提示:

  • 定义一个数 num,用 num/10 逐渐削减其倍数,直到 num/10 为 0;
  • 可以用 while 循环
查看答案与解析

答案:

c
#include <stdio.h>

void main()
{
    int num, count = 0;

    printf("请输入一个不多于4位的整数: ");
    scanf("%d", &num);

    while (num > 0)
    {
        num /= 10;
        count++;
    }

    printf("这是%d位数\n", count);
}

解析: 每次除以 10 去掉个位,计数器加 1,直到 num 变为 0。


难度: ⭐⭐ 考点: #位数判断 #while循环

💡 学习锦囊

📖 相关公式与知识点:

  • num/10 去掉最后一位数字。
  • 循环次数即为位数。

易错点

输入 0 时循环不执行,count=0,需要特殊处理。

🔄 举一反三
  1. 如何求一个数的各位数字之和?
    查看练习答案与解析

    答案:用 sum += num%10; num/=10; 循环 解析%10 取个位,/10 去掉个位。

2. 程序阅读

题目: 请阅读下面的程序,分析程序是否能编译通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。

c
#define LETTER 0
int main( )
{
    char str[20] = "C language";
    int i = 0;
    while ((str[i]))
    {
#if LETTER
        if (str[i] >= 'a' && str[i] <= 'z')
        {
            str[i] = str[i] - 32;
            printf("%c", str[i]);
        }
#else
        if (str[i] >= 'A' && str[i] <= 'Z')
        {
            str[i] = str[i] + 32;
            printf("%c", str[i]);
        }
#endif
        i++;
    }
    return 0;
}
查看答案与解析

答案: c

解析:LETTER 定义为 0,条件编译执行 #else 分支。程序将大写字母转换为小写并输出。"C language" 中只有 'C' 是大写字母,转换为 'c' 并输出。


难度: ⭐⭐ 考点: #条件编译 #大小写转换

💡 学习锦囊

📖 相关公式与知识点:

  • #if/#else/#endif 是预处理条件编译指令。
  • 大写转小写:ch + 32;小写转大写:ch - 32

思路分析

#if LETTER 中 LETTER=0 为假,执行 #else 分支。

🔄 举一反三
  1. #define LETTER 1,程序输出什么?
    查看练习答案与解析

    答案c language(所有小写字母转大写) 解析:执行 #if 分支,将小写转大写。

3. 程序阅读

题目: 请阅读下面的程序,分析程序是否能够编译通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。

c
int add(int n)
{
    if (n == 1)
        return 1;
    else
        return n + add(n - 1);
}

void main( )
{
    int n = 5;
    int sum = add(5);
    printf("结果为:%d\n", sum);
}
查看答案与解析

答案: 结果为:15

解析: 递归求和函数 add(n) = n + add(n-1),add(1) = 1。add(5) = 5+4+3+2+1 = 15。


难度: ⭐⭐ 考点: #递归 #求和

💡 学习锦囊

📖 相关公式与知识点:

  • 递归公式:$f(n) = n + f(n-1)$$f(1) = 1$
  • 递归必须有终止条件,否则会无限递归导致栈溢出。

思路分析

递归展开:add(5) → 5+add(4) → 5+4+add(3) → ... → 5+4+3+2+1 = 15。

🔄 举一反三
  1. 用递归求 n! 如何实现?
    查看练习答案与解析

    答案

c
int fact(int n) {
    if (n <= 1) return 1;
    return n * fact(n-1);
}

:::

4. 程序填空

题目: 请阅读下面的程序,在空白处填写正确的代码,实现换行。

c
int main( )
{
    printf("我在学习 C 语言");
    ______;
    return 0;
}
查看答案与解析

答案: printf("\n")putchar('\n')

解析:'\n' 是换行符,使光标移到下一行开头。


难度: ⭐ 考点: #换行符 #\n

💡 学习锦囊

📖 相关公式与知识点:

  • '\n':换行符(LF),ASCII 码 10。
  • '\r':回车符(CR),ASCII 码 13。
  • Windows 换行用 \r\n,Linux 用 \n
🔄 举一反三
  1. printf("A\nB"); 输出什么?
    查看练习答案与解析

    答案

A
B

:::

5. 程序阅读

题目: 请阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。

c
#include<stdio.h>
int sum(int a)
{
    int c=0;
    static int b=3;
    c+=1;
    b+=2;
    return a+b+c;
}

void main( )
{
    int i;
    int a=2;
    for (i=0; i<5; i++)
        printf("%d,", sum(a));
}
查看答案与解析

答案: 8,10,12,14,16,

解析: static 变量 b 只初始化一次,每次调用保留上次值:

  • 第 1 次:b=5, c=1, 返回 2+5+1=8
  • 第 2 次:b=7, c=1, 返回 2+7+1=10
  • 第 3 次:b=9, c=1, 返回 2+9+1=12
  • 第 4 次:b=11, c=1, 返回 2+11+1=14
  • 第 5 次:b=13, c=1, 返回 2+13+1=16

难度: ⭐⭐⭐ 考点: #static变量 #函数调用

💡 学习锦囊

📖 相关公式与知识点:

  • static 局部变量:只初始化一次,值在函数调用间保持。
  • 普通局部变量(如 c):每次调用重新初始化。

思路分析

b 每次调用增加 2,c 每次重置为 0 后加 1。返回值 = a + b + c。

🔄 举一反三
  1. 若去掉 static 关键字,输出结果是什么?
    查看练习答案与解析

    答案8,8,8,8,8,解析:b 每次调用都重新初始化为 3,b+=2 后为 5,返回 2+5+1=8。

你正在阅读的是会员专属文档,💕 限时特惠进行中
你尚未登录,目前新用户可获3天体验会员,去登录